﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using Novapangeia.Dominio;
using Novapangeia.RepositorioNHibernate;
using SharpArch.Data.NHibernate;

namespace Novapangeia.Negocio
{ 
    /// <summary>
    /// Essa classe é o elemento principal
    /// da camada de negocio, ela recebe os
    /// parametros fornecidos pela camada de Interface,
    /// coordena a criação e o gerenciamento dos objetos
    /// da camada de negocios e dá as ordens para 
    /// a camada de persistencia.
    /// </summary>
    public class GerenciadorUsuario
    {
        private RepositorioUsuario repositorioUsuario;

        public GerenciadorUsuario() 
        {
            repositorioUsuario = new RepositorioUsuario();
        }

        public void AtualizarUsuario(Usuario u) {
            using (UnitOfWork.Start())
            {
                repositorioUsuario.SaveOrUpdate(u);
            }
        }

        public Usuario Login(string login, string senha)
        {
            Usuario usuario = null;
            using (UnitOfWork.Start())
            {
                usuario = repositorioUsuario.ConsultarPorNomeSenha(login, senha);
            }
            return usuario;
        }

        public Usuario ConsultarUsuarioPorId(int id)
        {
            return repositorioUsuario.Get(id);
        }

        public Usuario consultarUsuarioPorCordenadas(int CordenadaX, int CordenadaY)
        {
            return repositorioUsuario.ConsultarPorCordenadas(CordenadaX, CordenadaY);
        }

        public Usuario consultarUsuarioDaSessao()
        {
            if (HttpContext.Current.Session["usuario"] == null)
            {
                return null;
            }

            int idUsuario = (int) HttpContext.Current.Session["usuario"];

            Usuario u = ConsultarUsuarioPorId(idUsuario);
            
            return u;
        }

        public void CalcularScoreUsuarios()
        {
            repositorioUsuario.CalcularScoreUsuarios();
        }

        public IList<Usuario> ListarUsuarios() {
            IList<Usuario> lista;
            lista = repositorioUsuario.GetAll();
            return lista;
        }

        public bool ExisteUsuariosNaArea(int xInicio, int xFim, int yInicio, int yFim)
        {
            return repositorioUsuario.ExisteUsuarioNaArea(xInicio, xFim, yInicio, yFim);
        }

        public IList<Usuario> ListarUsuariosNaArea(int xInicio, int xFim, int yInicio, int yFim)
        {
            return repositorioUsuario.ListarUsuariosNaArea(xInicio, xFim, yInicio, yFim);
        }
    }
}
